import prompt from '@system.prompt';
import app from '@system.app';

var JS_PATH = 'com.army.study.utils.JSInterface';

var BUNDLENAME = "com.army.study";
var ABILITYNAME = "com.army.study.MainAbility";

var intervalId;

export default {
    data: {
        //可授权的设备
        deviceList: [],
        // 本地设备Id
        localNetWorkId: '',
        // 是否是游戏界面，不是游戏界面就是授权的界面
        isGame: true,
        // 远程设备Id
        networkId: '',

        isStart: false,
        // 游戏是否结束，结束出现倒计时界面
        isEnd: false,
        //倒计时退出应用
        countdown: 3,
        //type=0 默认没有收到消息 type=1允许启动游戏 type=2 拒绝启动游戏
        type: 0
    },
    onInit() {
        if (this.networkId == undefined || this.networkId == '') {
            this.isGame = true;
        } else {
            this.isGame = false;
        }
    },
    startFA() {
        var that = this;
        this.javaInterface = createLocalParticleAbility(JS_PATH);

        this.showDeviceList();
    },
    async showDeviceList() {
        // 获取所有在线设备列表
        // https://developer.harmonyos.com/cn/docs/documentation/doc-references/js-apis-distributed-start-0000001050024935
        // 0：获取网络中所有设备信息列表。
        // 1：获取网络中在线设备信息列表。
        // 2：获取网络中离线设备信息列表。
        var ret = FeatureAbility.getDeviceList(0);
        if (ret.code == 0) {
            this.deviceList = [];
            for (var i=0; i<ret.data.length; i++) {
                // 将结果集存放在数组中
                this.deviceList.push({
                    deviceName: ret.data[i].deviceName,
                    networkId: ret.data[i].networkdId
                });
            }
        }
        // 在对话框中显示列表
        if (this.deviceList.length > 0) {
            this.$element('showDialog').show();
        }
    },
    async selectDevice(networkId) {
        this.$element('showDialog').close();

        let actionData = {
            // 该值是JS调用JAVA方法得到的本地设备networkId
            networkId: this.localNetWorkId
        };

        let target = {
            bundleName: BUNDLENAME,
            abilityName: ABILITYNAME,
            // 该值是通过FeatureAbility.getDeviceList(0)方法得到的在线设备的networkId
            networkId: networkId,
            data: actionData
        }

        let result = await FeatureAbility.startAbility(target);
        let ret = JSON.parse(result);
        if (ret.code == 0) {
            prompt.showToast({
                message: '请求权限中...',
                duration: 1000
            });
        }
    },
    isAllowGame(val) {
        // JS调用Java方法 val等于 0为允许, 1为不允许
        this.javaInterface = createLocalParticleAbility(JS_PATH);
        this.javaIntergace.isAllowGameAsync(val, result => {
            // 远程拉起FA, 1允许启动游戏 2拒绝启动游戏
            this.startRemoteAbility(result == 0 ? 1 : 2);
        });
    },
    startRemoteAbility(type) {
        // 通过type传给手机端，type=1允许启动游戏 type=2拒绝启动游戏
        let actionData = {
            type: type
        };

        let target = {
            bundlerName: BUNDLENAME,
            abilityName: ABILITYNAME,
            // 这个networkId是手机端发起FA时发送过来的哦，在data中没有指定，但可以这么调用传递过来的字段
            networkId: this.networkId,
            data: actionData
        };

        FeatureAbility.startAbility(target);
    },
    onNewRequest() {
        if (this.type == 1) {
            this.isGame = true;
            this.isStart = true;
            this.isEnd = false;
            // 接下来处理开始游戏的业务
            this.startGame();
        } else if (this.type == 2) {
            this.isGame = true;
            this.isStart = false;
            this.isEnd = true;
            // 倒计时3秒退出应用即可
            this.endGame();
        }
    },
    startGame() {

    },
    endGame() {
        intervalId = setInterval(this.endGameDown, 1000);
    },
    // 定时器，倒计时3秒退出应用
    endGameDown() {
        if (this.countdown <= 0) {
            clearInterval(intervalId);
            app.terminate();
        } else {
            this.countdown = this.countdown - 1;
        }
    }
}
